/**
 * 窗口相关的 IPC 客户端模块
 */
import { invoke, send } from '../ipc'

/**
 * 最小化窗口
 */
export function minimizeWindow(): void {
  send('minimize-window')
}

/**
 * 最大化/还原窗口
 */
export function maximizeWindow(): void {
  send('maximize-window')
}

/**
 * 关闭窗口
 */
export function closeWindow(): void {
  send('close-window')
}

/**
 * 获取窗口状态
 * @returns 窗口状态
 */
export async function getWindowState(): Promise<{
  isMaximized: boolean
  isMinimized: boolean
  isFullScreen: boolean
  isNormal: boolean
  error?: string
}> {
  return await invoke('get-window-state')
}

/**
 * 设置窗口全屏
 * @param fullscreen 是否全屏
 */
export function setFullscreen(fullscreen: boolean): void {
  send('set-fullscreen', fullscreen)
}

/**
 * 获取窗口大小
 * @returns 窗口大小
 */
export async function getWindowSize(): Promise<{
  width: number
  height: number
  error?: string
}> {
  return await invoke('get-window-size')
}

/**
 * 设置窗口大小
 * @param width 宽度
 * @param height 高度
 * @param animate 是否使用动画
 */
export function setWindowSize(width: number, height: number, animate: boolean = true): void {
  send('set-window-size', width, height, animate)
}

/**
 * 获取窗口位置
 * @returns 窗口位置
 */
export async function getWindowPosition(): Promise<{
  x: number
  y: number
  error?: string
}> {
  return await invoke('get-window-position')
}

/**
 * 设置窗口位置
 * @param x X坐标
 * @param y Y坐标
 * @param animate 是否使用动画
 */
export function setWindowPosition(x: number, y: number, animate: boolean = true): void {
  send('set-window-position', x, y, animate)
}

/**
 * 居中窗口
 */
export function centerWindow(): void {
  send('center-window')
}

/**
 * 获取屏幕信息
 * @returns 屏幕信息
 */
export async function getScreenInfo(): Promise<{
  displays: Array<{
    id: number
    bounds: Electron.Rectangle
    workArea: Electron.Rectangle
    scaleFactor: number
    rotation: number
    size: Electron.Size
    workAreaSize: Electron.Size
    isPrimary: boolean
  }>
  primaryDisplay: {
    id: number
    bounds: Electron.Rectangle
    workArea: Electron.Rectangle
    scaleFactor: number
    rotation: number
    size: Electron.Size
    workAreaSize: Electron.Size
  }
}> {
  return await invoke('get-screen-info')
}

/**
 * 刷新窗口
 */
export function reloadWindow(): void {
  send('reload-window')
}

/**
 * 强制刷新窗口
 */
export function hardReloadWindow(): void {
  send('hard-reload-window')
}

/**
 * 切换开发者工具
 */
export function toggleDevTools(): void {
  send('toggle-dev-tools')
} 
 